#!/usr/bin/python
#coding:utf-8
'''
tensorflow数据增强接口
1、resize(重置大小)
2、crop（裁剪）
3、flip（翻转）
4、brightness（改变光照和对比度）
'''

import numpy as np
import tensorflow as tf 
import matplotlib.pyplot as plt

name='./TensorFlow/data/gugong.jpg'
###构建计算图#####
img_string = tf.read_file(name) #读取文件
img_decoded = tf.image.decode_image(img_string) #string转图片向量

def resizeImg(img_decoded):
    '''
    resize:
        tf.image.resize_area
        tf.image.resize_bicubic:二次向量差值法缩放
        tf.image.resize_nearest_neighbor：缩放使用最相近像素点赋值
    return:
        1:修改后图片
        size：修改后图片尺寸
    '''
    img_decoded = tf.reshape(img_decoded,[1,319,478,3]) #编号，高度，宽度，3维,重置数组格式，tf默认图片批处理，第一位为图片编号，将图片从三位变四维
    resize_img=tf.image.resize_bicubic(img_decoded,[638,956])  #放大图片
    return resize_img,[638,956]

def resizeDecode(img_decoded_val,size):
    '''
    resize
    '''
    img_decoded_val = img_decoded_val.reshape((size[0],size[1],3))#重置图片格式，从4维变3维，重回图片格式
    img_decoded_val = np.asarray(img_decoded_val,np.uint8)  #float类型转int类型，显示图片工具不支持float类型
    return img_decoded_val


def cropImg(img_decoded):
    '''
    裁剪图片
        tf.image.pad_to_bounding_box:框填充
        tf.image.crop_to_bunding_box:框裁剪
        tf.random_crop：随机裁剪
    return:
        1:修改后图片
        size：修改后图片尺寸
    '''
    img_decoded = tf.reshape(img_decoded,[1,319,478,3]) #编号，高度，宽度，3维，重置数组格式，tf默认图片批处理，第一位为图片编号，将图片从三位变四维
    padded_img=tf.image.pad_to_bounding_box(img_decoded,50,100,500,800)  #图片剪裁位置50,100，生成图片大小500,800图
    return padded_img,[500,800]

def flip(img_decoded):
    '''
    图片翻转：
        tf.image.flip_up_down：上下翻转
        tf.image.flip_left_right:左右翻转
        tf.image.random_flip_up_down:随机上下翻转
        tf.image.random_flip_left_right:随机左右翻转
    return:
        1:修改后图片
        size：修改后图片尺寸
    '''
    img_decoded = tf.reshape(img_decoded,[1,319,478,3]) #编号，高度，宽度，3维，重置数组格式，tf默认图片批处理，第一位为图片编号，将图片从三位变四维
    padded_img=tf.image.flip_up_down(img_decoded)  #图片上下翻转
    return padded_img,[319,478]

def brightnessImg(img_decoded):
    '''
    图片改变光照
        tf.image.adjust_brightness:调整光照程度
        tf.image.random_brightness:随机光照程度
        tf.image.adjust_constrast:调整对比度
        tf.image.random_constrast:随机对比度
    return:
        1:修改后图片
        size：修改后图片尺寸
    '''
    img_decoded = tf.reshape(img_decoded,[1,319,478,3]) #编号，高度，宽度，3维，重置数组格式，tf默认图片批处理，第一位为图片编号，将图片从三位变四维
    padded_img=tf.image.adjust_brightness(img_decoded,-0.5)  #调整光照
    return padded_img,[319,478]

# img_decoded,size=resizeImg(img_decoded) #重置图片尺寸
# img_decoded,size = cropImg(img_decoded) #剪裁图片
# img_decoded,size = flip(img_decoded) #翻转图片
img_decoded,size = brightnessImg(img_decoded) #调整光照

sess = tf.Session()
img_decoded_val = sess.run(img_decoded)

img_decoded_val=resizeDecode(img_decoded_val,size) #重置图片尺寸

# print(img_decoded_val.shape)

plt.imshow(img_decoded_val)
plt.show()
